Linux学习-文件和目录
为什么要用Linux系统
个人认为,Linux操作系统和类Linux操作系统的命令行界面是最适合进行生物信息分析的操作系统。原因有三点:
长期运行的稳定性
多数软件只有Linux版本
强大的Bash命令简化繁琐的操作,尤其是大大简化重复性工作
但对于初学者来说,接触和理解Linux操作系统需要一些时间和摸索。陡然从可视化点选操作的Windows进入到只有命令行界面的Linux,最大的陌生感是不知道做什么,不知道文件在哪?本文希望能通过几个示例帮助大家适应Linux系统。
如何获取Linux系统
如果自己的单位有共有服务器,可以尝试申请账号。
自己的电脑安装双系统或虚拟机
购买一块云服务器
试验下在线学习平台实验楼 https://www.shiyanlou.com (里面也有不少Linux教程,任意点一个进去,双击桌面的
Xfce
图标,都可以启动Linux终端)<生信宝典>微信公众号后台回复向管理员索要
初识Linux系统
登录Linux系统后,呈现在眼前的是这样一个界面:
Last login: Mon Jun 5 16:56:56 2017 from 219.241.208.209
Welcome to aliyun Elastic Compute Service!
ct@ehbio:~$
首先解释下出现的这几个字母和符号:
ct
: 用户名ehbio
:如果是登录的远程服务器,则为宿主机的名字~
: 代表家目录, 在我们进入新的目录后,这个地方会跟着改变$
: 用来指示普通用户输入命令的地方;对根用户来说一般是#
http://bashrcgenerator.com/可视化定制不同的显示方式。
我的电脑在哪?
打开Windows,首先看到的是桌面;不爱整理文件的我,桌面的东西已经多到需要2个屏幕才能显示的完。另外一个常用的就是我的电脑,然后打开D盘,依次点开对应的文件夹,然后点开文件。
Linux的文件系统组织方式与Windows略有不同,登录进去就是家目录,可视为Windows下的桌面。在这个目录下,我们可以新建文件、新建文件夹,就像在桌面上的操作一样。
如果想查看当前目录下都有什么内容,输入命令 ls
,回车即可 (ls可以理解为单词list的缩写)。当前目录下什么也没有,所以没有任何输出。
ct@ehbio:~$ ls
如果错把l
看成了i
,输入了is
,则会出现下面的提示未找到命令
。如果输入的是Linux基本命令,出现这个提示,基本可以判定是命令输入错了,瞪大眼睛仔细看就是了。 在敲完命令回车后,注意查看终端的输出,以判断是否有问题。
ct@ehbio:~$ is
-bash: is: 未找到命令
# 大小写敏感
ct@ehbio:~$ lS
-bash: lS: 未找到命令
当前目录下只有一个文件,看不出效果,我们可以新建几个文件和文件夹,来查看下。
mkdir
是新建一个目录 (m
ak
e a dir
ectory);data
是目录的名字。
如果目录存在,则会出现提示,”无法创建已存在的目录”。这时可以使用参数-p
忽略这个错误。
ct@ehbio:~$ mkdir data
ct@ehbio:~$ mkdir ls
data
ct@ehbio:~$ mkdir data
mkdir: 无法创建目录"data" : 文件已存在
ct@ehbio:~$ mkdir -p data
cat
是一个命令,主要用来查看文件;在这与<<END
连用用于读入大段数据。输入cat <<END
之后,回车,会看到终端出现一个大于号,大于号后面可以输入内容,再回车,继续输入内容,直到我们输入END
(大写的,与上面一致),输入过程结束,我们输入的内容都显示在了屏幕上。
ct@ehbio:~$ mkdir data
ct@ehbio:~$ cat <<END
> a
> bc
> END
a
bc
`>`是一个重定向符号,即把前面命令的输出写入到`>`后面的文件中。如下所示,新建了一个`Fasta`格式的文件。
`ls -l`列出文件的详细信息;`-l`表示命令行参数,是程序预留的一些选项,保证在不更改程序的情况下获得更灵活的操作。可使用`man ls`查看`ls`所有的命令行参数, 上下箭头翻页,按`q`退出查看。(man: manual, 手册)
```bash
ct@ehbio:~$ cat <<END >data/test.fa
> >SOX2
> ACGTCGGCGGAGGGTGGSCGGGGGGGGAGAGGT
> ACGATGAGGAGTAGGAGAGAGGAGG
> >OCT4
> ACGTAGGATGGAGGAGAGGGAGGGGGGAGGAGAGGAA
> AGAGTAGAGAGA
> >NANOG
> ACGATGCGATGCAGCGTTTTTTTTTGGTTGGATCT
> CAGGTAGGAGCGAGGAGGCAGCGGCGGATGCAGGCA
> ACGGTAGCGAGTC
> >mYC HAHA
> ACGGAGCGAGCTAGTGCAGCGAGGAGCTGAGTCGAGC
> CAGGACAGGAGCTA
> end
> END
## 注意命令和参数之间的空格
ct@ehbio:~/data$ ls-l
-bash: ls-l: 未找到命令
ct@ehbio:~$ ls -l
总用量 4
## d: dir; 表示data是个目录
## rwx:表示目录的权限,暂时忽略,或自己在线搜索
drwxrwxr-x 2 ct ct 4096 6月 8 14:52 data
ct@ehbio:~$ ls -l data
总用量 4
## 开头的`-`表示test.fa是个文件
-rw-rw-r-- 1 ct ct 284 6月 8 14:48 test.fa
查看写入的文件的内容,cat 文件名
;需要注意的是文件所在的目录,默认是当前目录;如下面第一个命令,会提示cat: test.fa: 没有那个文件或目录
,是因为当前目录下不存在文件test.fa
。(注意文件末尾的end)
ct@ehbio:~$ cat test.fa
cat: test.fa: 没有那个文件或目录
ct@ehbio:~$ cat data/test.fa
>SOX2
ACGTCGGCGGAGGGTGGSCGGGGGGGGAGAGGT
ACGATGAGGAGTAGGAGAGAGGAGG
>OCT4
ACGTAGGATGGAGGAGAGGGAGGGGGGAGGAGAGGAA
AGAGTAGAGAGA
>NANOG
ACGATGCGATGCAGCGTTTTTTTTTGGTTGGATCT
CAGGTAGGAGCGAGGAGGCAGCGGCGGATGCAGGCA
ACGGTAGCGAGTC
>mYC HAHA
ACGGAGCGAGCTAGTGCAGCGAGGAGCTGAGTCGAGC
CAGGACAGGAGCTA
end
test.fa
在目录data
下,可以先进入data
目录,然后再查看文件。类比于Windows下先点开一个文件夹,再点开下面的文件。
cd
(change dir)切换目录。
head
查看文件最开始的几行,默认为10行,可使用-n 6
指定查看前6行。
ct@ehbio:~$ cd data
ct@ehbio:~/data$ head -n 6 test.fa
>SOX2
ACGTCGGCGGAGGGTGGSCGGGGGGGGAGAGGT
ACGATGAGGAGTAGGAGAGAGGAGG
>OCT4
ACGTAGGATGGAGGAGAGGGAGGGGGGAGGAGAGGAA
AGAGTAGAGAGA
另外less
和more
也可以用来查看文件,尤其是文件内容特别多的时候。
ct@ehbio:~/data$ less test.fa
# q: 退出
# 上下箭头、空格翻页
前面使用的命令,有几个用到了参数如ls -l
, head -n 6
等,需要注意的是命令跟参数之间要有空格。
终端运行man ls
可以查看ls
所有可用的参数,上下箭头翻页,按q
退出查看。(man: manual, 手册)
ct@ehbio:~/data$ man ls
NAME
ls - list directory contents
SYNOPSIS
ls [OPTION]... [FILE]...
DESCRIPTION
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.
Mandatory arguments to long options are mandatory for short options too.
-a, --all
do not ignore entries starting with .
-A, --almost-all
do not list implied . and ..
--author
with -l, print the author of each file
-b, --escape
print C-style escapes for nongraphic characters
....
两个有意思的命令,tac
: 文件翻转;rev
每列反转。
ct@iZ8vb3e9jtel4m99ss6e7eZ:~/data$ cat <<END | tac
> first
> second
> third
> END
third
second
first
ct@iZ8vb3e9jtel4m99ss6e7eZ:~/data$ cat <<END | rev
> abcde
> xyz
> END
edcba
zyx
注:
这里我们假设所有的文件和文件夹都放置于家目录下
Linux的家目录严格来说可能类似于Windows下的
C:\Users\ct